package com.wanjia.estate.pojo.bank.form;

import lombok.Data;

import java.io.Serializable;
import java.util.List;

/**
 * <P>表单项</P>
 * <P>type=text时</P>
 * <P>type=hidden时不需向用户展示该项，只需回传该参数即可。</P>
 * <P>type=button时表示该页面有特殊定义的用户按钮。在用户点下某按钮后，根据按钮的action属性选择拼接查询预操作报文（action:prequery）或缴费预操作报文（action:prepay），且params中需要拼接上该按钮的name:value(如果该biz有多个按钮，其他按钮的name和value不应被加入params中)，例如"businessType": "foo"</P>
 * <P>type=text时若value有值，则为输入项中默认值。rule属性为保留域，忽略即可。下同。</P>
 * <P>type=single时</P>
 * <P>type=date时value的格式固定为: yyyyMMdd</P>
 * <P>type=yearmonth时value的格式固定为: yyMM</P>
 * <P>type=datemonth时value的格式固定为: yyyyMM</P>
 * <P>type=bill时该FormItem表示多账单。options表示多条账单的信息，options的每个元素表示一条账单，label为用户界面用来展示给用户的账单描述，value为该账单bill_id的值，amount为该账单的金额。用户选择某条账单后，接入方上送bill_id=用户选择账单的value值</P>
 * <P>type=multibill时该FormItem表示多账单（可多选任意的多条账单进行缴费）。options表示多条账单的信息，options的每个元素表示一条账单，label为用户界面用来展示给用户的账单描述，value为该账单的编号，amount为该账单的金额，detail为账单的详情信息。用户选择某几条账单后，接入方需上送name值: 用户选择的账单的value值数组。</P>
 * <P>type=multibillstring时该FormItem表示多账单（全查全缴）。options表示多条账单的信息，options的每个元素表示一条账单，label为用户界面用来展示给用户的账单描述， amount为该账单的金额，detail为账单的详情信息。该FormItem只是向用户展示多账单明细，无需上送键值。</P>
 * <P>type=singlebill时该FormItem表示多账单（只能选择一条账单进行缴费）。options表示多条账单的信息，options的每个元素表示一条账单。Disable表示该条账单是否支持缴费（1-支持/0-不支持）。label为用户界面用来展示给用户的账单描述，value为该账单的bill_id的值，amount为该账单的金额，detail为账单的详情信息。用户选择某条账单后，接入方上送bill_id=用户选择账单的value值</P>
 */
@Data
public class FormItem implements Form {

    public static final String ACTION_PREQUERY = "prequery";
    public static final String ACTION_PREPAY = "prepay";

    public static final String ISSTYLE_SELECT = "select";
    public static final String ISSTYLE_RADIO = "radio";
    public static final String ISSTYLE_DETAIL = "detail";

    /**
     * 类型
     */
    protected String type;

    /**
     * 显示名称
     */
    private String label;
    /**
     * 输入参数名,用于提交查询或支付请求
     */
    private String name;
    /**
     * 用户按钮操作
     */
    private String action;
    /**
     * 保留域，忽略即可。
     */
    private Serializable rule;
    /**
     * ?
     */
    private String vid;
    /**
     * istyle属性表示推荐的用户界面控件类型，非必填项，默认为select ，其目前的可选值有：
     * 1. select 单选下拉框、
     * 2. radio 单选按钮
     * 3. detail 有详情的单选下拉框
     * 当istyle为detail时，option[i]有detail属性，detail为该选项的详情信息
     */
    private String istyle;
    /**
     * 查询结果
     */
    private String value;

    private List<Option> options;

    @Data
    public static class Option implements Serializable {
        /**
         * 该条账单是否支持缴费（1-支持/0-不支持）
         */
        private String disable;
        /**
         * 显示名称
         */
        private String label;
        /**
         * 查询结果
         */
        private String value;
        /**
         * 查询结果
         */
        private String amount;
        /**
         * 查询结果
         */
        private List<Option> detail;
    }
}
